package hl.crazy_java.chapter_16;

/**
 *
 * 创建线程：通过继承 Thread 类，重写 run 方法
 * 通过 new 得到一个 线程对象
 * 通过 start() 方法 运行 线程对象的 run() 方法
 * 继承后直接获得父类的实例方法，如 getId() getName() 等
 * Thread.currentThread() 为类方法，返回 当前线程的 调用对象
 *
 *
 * 线程的 五种 状态：NRRBD  new   ready   running     blocked     dead
 *                        新建   就绪     运行         阻塞       死亡
 *
 * 调用 new 关键字 创建一个线程对象后，处于 新建 状态
 * 调用 start() 方法后，线程处于 就绪 状态，“等待执行”，
 *      此时还未运行 run() 方法 ，具体 运行时间 取决于 java 虚拟机的调度策略
 * 当 run() 方法被调用时，线程处于 运行 状态
 * 当 run() 方法执行完毕，处于 死亡 状态
 *
 *
 * @author Liu Huan
 */
class FirstThread extends Thread {

    @Override
    public void run() {
        System.out.println("Thread name : " + getName());
        System.out.println("Thread id : " + getId());
        System.out.println("Thread state : " + getState());
        System.out.println("Thread group : " + getThreadGroup());
        System.out.println("Thread priority : " + getPriority());
        System.out.println("Thread context : " + getContextClassLoader());
    }
}

class test {
    public static void main(String[] args) throws InterruptedException {
        var p = new FirstThread();
        p.start();

        // 通过让 当前线程 暂停 1ms 使得程序 顺序 打印
        Thread.sleep(1);


        System.out.println("current : " + Thread.currentThread().getName());;
    }
}